'use strict'
const path = require('path')
const defaultSettings = require('./src/settings.js')
const CompressionPlugin = require("compression-webpack-plugin")
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

function resolve(dir) {
  return path.join(__dirname, dir)
}

const name = defaultSettings.title || '泰捷云学培训平台' // 页面标题

// 如果端口设置为80，
// 使用管理员权限执行命令行。
// 例如，Mac:sudo npm run
// 可以通过以下方法更改端口：
// port=9527 npm run dev或npm run dev--port=9527
const port = process.env.port || process.env.npm_config_port || 9527 // 开发端口

// 所有配置项说明都可以在这里找到：https://cli.vuejs.org/config/
module.exports = {
  /**
  * 如果计划在子路径下部署站点，则需要设置publicPath，
  * 例如GitHub页面。如果您计划将站点部署到https://foo.github.io/bar/,
  * 然后publicPath应设置为“/bar/”。
  * 在大多数情况下，请使用“/”！！！
  * 详细信息：https://cli.vuejs.org/config/#publicpath
  */
  publicPath: '/user',
  outputDir: '../taijieyun/public/user',
  assetsDir: 'static',
  lintOnSave: process.env.NODE_ENV === 'development',
  productionSourceMap: false,
  devServer: {
    port: port,
    open: true,
    overlay: {
      warnings: false,
      errors: true
    },
    https: true,
    proxy:{
      '/api':{
        target:'http://taijieyun.oss-cn-beijing.aliyuncs.com/',
        changeOrigin:true,
        ws:true,
        pathRewrite:{
          '^/api':' '
        }
      },
      '/v3':{
        target:'https://api.mch.weixin.qq.com/',
        changeOrigin:true,
        ws:true,
        pathRewrite:{
          '^/v3':'/v3'
        }
      },
      '/weixin':{
        target:'https://api.weixin.qq.com/',
        changeOrigin:true,
        ws:true,
        pathRewrite:{
          '^/weixin':''
        }
      },
    }
  },
  configureWebpack: {
    // 在webpack的name字段中提供应用程序的标题，
    // 以便它可以在索引.html插入正确的标题。
    name: name,
    resolve: {
      alias: {
        '@': resolve('src')
      }
    },
    plugins:[
      // new BundleAnalyzerPlugin(),  //打包插件  查看打包状态
      new CompressionPlugin({
        test:/\.js$|.\css$|\.jpg$|\.png/, // 匹配文件名
        threshold: 10240, // 对超过10k的数据压缩
        deleteOriginalAssets: false // 删除源文件
      })
    ]
  },
  chainWebpack(config) {
    // 它可以提高第一屏的速度，建议打开预加载
    config.plugin('preload').tap(() => [{
      rel: 'preload',
      // 忽略运行时.js
      // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
      fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
      include: 'initial'
    }])

    // 当有很多页面时，会导致太多无意义的请求
    config.plugins.delete('prefetch')

    config
      .when(process.env.NODE_ENV !== 'development',
        config => {
          config
            .plugin('ScriptExtHtmlWebpackPlugin')
            .after('html')
            .use('script-ext-html-webpack-plugin', [{
              // `runtime`必须与runtimeChunk名称相同。默认值为`runtime`
              inline: /runtime\..*\.js$/
            }])
            .end()
          config
            .optimization.splitChunks({
              chunks: 'all',
              cacheGroups: {
                libs: {
                  name: 'chunk-libs',
                  test: /[\\/]node_modules[\\/]/,
                  priority: 10,
                  chunks: 'initial' // 仅安装最初依赖的第三方
                },
                elementUI: {
                  name: 'chunk-elementUI', // 将elementUI拆分为单个包
                  priority: 50, // 权重需要大于libs和app，否则将打包成libs或app
                  test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // 为了适应cnpm
                },
                vant: {
                  name: 'chunk-vant', // 将elementUI拆分为单个包
                  priority: 40, // 权重需要大于libs和app，否则将打包成libs或app
                  test: /[\\/]node_modules[\\/]_?vant(.*)/ // 为了适应cnpm
                },
                pdfjsDist: {
                  name: 'chunk-PDF', // 将elementUI拆分为单个包
                  priority: 60, // 权重需要大于libs和app，否则将打包成libs或app
                  test: /[\\/]node_modules[\\/]_?pdfjs-dist@2.0.943@pdfjs-dist(.*)/ // 为了适应cnpm
                },
                moment: {
                  name: 'chunk-moment', // 将elementUI拆分为单个包
                  priority: 30, // 权重需要大于libs和app，否则将打包成libs或app
                  test: /[\\/]node_modules[\\/]_?moment@2.29.4@moment(.*)/ // 为了适应cnpm
                },
                aliplayer: {
                  name: 'chunk-aliplayer', // 将elementUI拆分为单个包
                  priority: 30, // 权重需要大于libs和app，否则将打包成libs或app
                  test: /[\\/]node_modules[\\/]_?aliyun-aliplayer@2.15.6@aliyun-aliplayer(.*)/ // 为了适应cnpm
                },
                antDesignIcons: {
                  name: 'chunk-antDesignIcons', // 将elementUI拆分为单个包
                  priority: 20, // 权重需要大于libs和app，否则将打包成libs或app
                  test: /[\\/]node_modules[\\/]_?@ant-design_icons@2.1.1@@ant-design(.*)/ // 为了适应cnpm
                },
                commons: {
                  name: 'chunk-commons',
                  test: resolve('src/components'), // 可以自定义您的规则
                  minChunks: 3, // 最小公共数
                  priority: 5,
                  reuseExistingChunk: true
                }
              }
            })
          // https://webpack.js.org/configuration/optimization/#optimizationruntimechunk
          config.optimization.runtimeChunk('single')
        }
      )
  },
  css: {
    loaderOptions: {
      less: {
        // 若 less-loader 版本小于 6.0，请移除 lessOptions 这一级，直接配置选项。
        lessOptions: {
          modifyVars: {
            // 或者可以通过 less 文件覆盖（文件路径为绝对路径）
            hack: `true; @import "${path.join(__dirname,'../src/styles/vantcss.less')}";`,
          },
        },
      },
    },
  }
}
